home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / Dots & Pixels / sources / application.cp next >
Text File  |  1995-09-29  |  3KB  |  152 lines

  1. #include <stdlib.h>
  2.  
  3. #if defined( __SC__)
  4.     #include <pascal.h>
  5. #endif
  6. #include <Fonts.h>
  7. #include <Menus.h>
  8. #include <Packages.h>
  9. #include <SegLoad.h>
  10. #include <ToolUtils.h>
  11. #include <TextEdit.h>
  12. #include <GestaltEqu.h>
  13. #include <Memory.h>
  14. #include <QuickDraw.h>
  15. #include <Windows.h>
  16. #include <OSEvents.h>
  17. #include <Resources.h>
  18.  
  19. #ifdef do_QT
  20.     #include <Movies.h>
  21. #endif
  22. #include "general.h"
  23. #include "application.h"
  24.  
  25. application::application( char *resfilename) : general()
  26. {
  27.     MaxApplZone();
  28.     InitGraf( &(qd.thePort));
  29.     #ifdef _APPL_
  30.         InitFonts();
  31.         InitWindows();
  32.         InitMenus();
  33.         TEInit();
  34.         InitDialogs( 0);
  35.         InitCursor();
  36.     #endif
  37.     FlushEvents( everyEvent, 0);
  38.  
  39.     if( resfilename != 0)
  40.     {
  41.         const short resfileno = OpenResFile( CtoPstr( resfilename));
  42.         
  43.         if( resfileno == -1)
  44.         {
  45.                 report_error_and_exit( "application::application: Error opening resource file");
  46.         }
  47.     }
  48.  
  49.     #ifdef do_QT
  50.         InitQuickTime();
  51.     #endif
  52.     #ifndef _APPL_
  53.         //
  54.         // install exit handler to remove windows which are still open:
  55.         //
  56.         #ifdef THINK_CPLUS
  57.             int result = atexit( TryToRecover);
  58.         #else
  59.             int result = atexit( application::TryToRecover);
  60.         #endif
  61.         CheckForError( result, "exit Handler TryToRecover could not be installed.");
  62.     #endif
  63.     
  64.     #ifdef _APPL_
  65. //        MenuHandle applemenu = GetMenu( 128);
  66. //        
  67. //        CheckForError( (applemenu == 0), "GetMenu( 128)");
  68. //        InsertMenu( applemenu, 0);        // 0 = beforeid;
  69. //        AddResMenu( applemenu, 'DRVR');
  70. //        DrawMenuBar();
  71.     #endif
  72. }
  73.  
  74. #ifndef _APPL_
  75.     #ifdef THINK_CPLUS
  76.         void TryToRecover()
  77.     #else
  78.         void application::TryToRecover()
  79.     #endif
  80.     {
  81.         //
  82.         // This function is called at exit time. It closes all windows
  83.         // belonging to instances of class 'window'. This is done by
  84.         // looking at the WRefCon field. window::window sets this to
  85.         // the constant 'vens' (venster is dutch for window)
  86.         //
  87.         // from SysEqu.h:
  88.         // [GLOBAL VAR] Pointer to first window in window list;
  89.         // 0 if using events but not windows:
  90.         //
  91.         const short WindowList = 0x9D6;
  92.         
  93.         WindowPtr currentwindow = *(WindowPtr *)WindowList;
  94.     
  95.         while( currentwindow)
  96.         {
  97.             const long theID = GetWRefCon( currentwindow);
  98.     
  99.             if( theID == 'vens')
  100.             {
  101.                 //
  102.                 // we allocated our own WindowRecord => use CloseWindow, not DisposeWindow
  103.                 //
  104.                 CloseWindow( currentwindow);
  105.             }
  106.             currentwindow = (WindowPtr)(((WindowPeek)currentwindow)->nextWindow);
  107.         }
  108.         InitCursor();        // cursor gets lost occassionally.
  109.     }
  110. #endif
  111.  
  112. #ifdef do_QT
  113.     void application::InitQuickTime() const
  114.     {
  115.         long response;
  116.     
  117.         OSErr error = Gestalt( gestaltQuickTime, &response);
  118.     
  119.         CheckForError( error, "gestaltQuickTime");
  120.         
  121.         error = Gestalt( gestaltCompressionMgr, &response);
  122.     
  123.         CheckForError( error, "gestaltCompressionMgr");
  124.     
  125.         error = EnterMovies();
  126.         
  127.         CheckForError( error, "EnterMovies");
  128.     }           
  129. #endif
  130.  
  131. application::~application()
  132. {
  133.     #ifdef do_QT
  134.         //
  135.         // TN: QT 510 recommends the following:
  136.         //
  137.         // But, if you’ve nested EnterMovies and ExitMovies calls, this is what we
  138.         // recommend:
  139.         // 1. If you’re writing an application, call EnterMovies and don’t call ExitMovies.
  140.         //    This way, any external that uses the same a5 world and calls EnterMovies and
  141.         //    ExitMovies will simply increment a counter and then decrement the counter and
  142.         //    do nothing else.
  143.         //
  144.         // ExitMovies();
  145.         //
  146.     #endif
  147.     FlushEvents( everyEvent, 0);
  148.     #ifdef _APPL_
  149.         ExitToShell();
  150.     #endif
  151. }
  152.